package com.authService.config;

import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * swagger 配置
 *
 */
@Configuration
public class SwaggerConfig {

    @Value("${server.port}")
    private String port;

    public String getLocalHostAddress() throws UnknownHostException {
        return InetAddress.getLocalHost()
            .toString();
    }


    /**
     * 配置自定义的 OpenAPI 规范
     * 通过 @Bean 注解声明该方法返回一个 Spring Bean，该 Bean 是一个 OpenAPI 对象
     * 该方法允许通过 Spring Context 初始化 OpenAPI 对象，并自定义 API 的标题、版本、描述等信息
     *
     * @return 自定义的 OpenAPI 对象
     */
    @Bean
    public OpenAPI customOpenAPI() {
        // 创建并配置 OpenAPI 对象
        return new OpenAPI()
                .info(new Info()
                        .title("我的 API")            // 设置 API 标题
                        .version("v0.0.1")            // 设置 API 版本
                        .description("这是一个示例 API") // 设置 API 描述
                        .license(new License().name("Apache 2.0").url("http://example.com")) // 设置 API 的许可证信息，包括许可证名称和 URL
                        .contact(new Contact()
                                .name("开发者")        // 设置联系人名称
                                .url("http://example.com") // 设置联系人的 URL
                                .email("developer@example.com"))) // 设置联系人的电子邮件地址
                .externalDocs(new ExternalDocumentation()
                        .description("外部文档的描述") // 设置外部文档的描述
                        .url("http://example.com")); // 设置外部文档的 URL
    }

    /**
     * 配置并返回一个GroupedOpenApi实例，用于指定一组API接口
     *
     * @return GroupedOpenApi实例，配置了组名为"test"，匹配路径为"/test/**"的接口
     */
    @Bean
    public GroupedOpenApi testApi() {
        return GroupedOpenApi.builder()
                .group("api") // 设置组名
                .pathsToMatch("/**") // 设置需要匹配的路径模式
                .build();
    }
}
